const path = require('path')
const { app, Menu, Tray, BrowserWindow } = require('electron');
const io = require('./js/io')

// 在安装/卸载时处理在Windows上创建/删除快捷方式的操作。
if (require('electron-squirrel-startup')) { // eslint-disable-line global-require
  app.quit();
}

// 保持对window对象的全局引用，如果不这么做的话，当JavaScript对象被
// 垃圾回收的时候，window对象将会自动的关闭
let mainWindow;

const createWindow = () => {
  // 创建浏览器窗口。
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
  });

  // 加载index.html文件
  mainWindow.loadURL(`file://${__dirname}/index.html`);

  // 打开开发者工具
  // mainWindow.webContents.openDevTools();

  // 当 window 被关闭，这个事件会被触发。
  mainWindow.on('closed', () => {
    // 取消引用 window 对象，如果你的应用支持多窗口的话，
    // 通常会把多个 window 对象存放在一个数组里面，
    // 与此同时，你应该删除相应的元素。
    mainWindow = null;
  });
};

// 创建WS
const createWS = () => {
  let tray = new Tray(path.join(__dirname, './assets/card.png'))
  const contextMenu = Menu.buildFromTemplate([
    {
      label: '退出', click: () => {
        app.quit();
      }
    },
  ])
  tray.setToolTip('身份证阅读器')
  tray.setContextMenu(contextMenu)

  io.init(10088)
}

// 限制只可以打开一个应用, 4.x的文档
const gotTheLock = app.requestSingleInstanceLock()

if (!gotTheLock) {
  app.quit()
} else {
  app.setLoginItemSettings({
    openAtLogin: true,
    args: ["--openAsHidden"]
  })

  // Electron 会在初始化后并准备
  // 创建浏览器窗口时，调用这个函数。
  // 部分 API 在 ready 事件触发后才能使用。
  app.on('ready', createWS);

  // 当全部窗口关闭时退出。
  app.on('window-all-closed', () => {
    // 在 macOS 上，除非用户用 Cmd + Q 确定地退出，
    // 否则绝大部分应用及其菜单栏会保持激活。
    if (process.platform !== 'darwin') {
      app.quit();
    }
  });

  app.on('activate', () => {
    // 在macOS上，当单击dock图标并且没有其他窗口打开时，
    // 通常在应用程序中重新创建一个窗口。
    if (mainWindow === null) {
      createWindow();
    }
  });
}

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and import them here.
